
// 目的:

// 1:使用请求拦截器，可以在请求拦截器中处理一些业务(开始进度条、请求头携带公共参数)发请求之前

// 2:使用响应拦截器，可以在响应拦截器中处理一些业务(进度条结束、简化服务器返回的数据、处理http网络错误)

// 在根目录下创建utils/request.ts
import axios from "axios";
import { ElMessage } from "element-plus";
import useUserStore from '@/store/modules/user';
//创建axios实例
//第一步：利用axios对象的create方法，去创建axios实例（好处：其他的配置：基础路径，超时的时间）
//request是axios
let request = axios.create({
    baseURL: '/api',//基础路径会携带/api
    timeout: 5000//超时的时间的设置  超过5s不管是成功还是失败都是失败   必须在5秒之内搞定
    
})
// console.log(import.meta.env.VITE_APP_BASE_API);


//请求拦截器   第二步：给axios实例添加请求和响应拦截器
request.interceptors.request.use(config => {
//config配置对象有headers（请求头，经常给服务器端携带公共参数）
//config.headers.token = '123'
//返回配置对象
let userStore = useUserStore()
if( userStore.token){
    // 给服务器携带token
    config.headers.token = userStore.token
}
    return config;
});
//响应拦截器 第三步：给axios实例添加请求和响应拦截器
request.interceptors.response.use((response) => {
//response是服务器返回的数据
//成功回调
//简化数据
    return response.data;
}, (error) => {
    //处理网络错误
    //失败回调：处理http网络错误的
    //定义一个变量：存储网络错误的信息
    let msg = '';
    //http状态码
    let status = error.response.status;
    switch (status) {
        case 401:
            msg = "token过期";
            break;
        case 403:
            msg = '无权访问';
            break;
        case 404:
            msg = "请求地址错误";
            break;
        case 500:
            msg = "服务器出现问题";
            break;
        default:
            msg = "无网络";

    }
    //提示错误信息
    ElMessage({
        type: 'error',
        message: msg
    })
    return Promise.reject(error);
});
export default request;